"""

元组： tuple
元组不可变的有序的序列
元组像列表一样，可以存储多个元素
但是元组一旦创建就不能修改其中的元素（增加，删除，修改）
因为元组是不可变的所以元组比列表更加的安全，访问的速度更快
元组可以用作字典的键（列表不行）
"""
#在元组中，单元素末尾必须加上逗号，否则python会将其当成普通的表达式
# a = (10,20,30)
# print(type(a))
#
# b = 10,20,30
# print(type(b))
#
# c = (10,)
# print(type(c))

#使用tuple()函数来创建元组

# 创建一个空的元组，常用于初始化，或者是一个默认的值
# empty_tpule = tuple()
# print(empty_tpule)

#从字符串中创建，将每一个字符变成一个元素
#python将这个字符串逐一的打开，并且变成元组的元素
#每一个字符（空格，标点符号）都会成为单独的元素
# str_tuple = tuple("abc")
# print(str_tuple)
#range(7) 生成数字的序列，不包括 7 ，tuple会将这个序列展开成元组
# range_tuple = tuple(range(7))
# print(range_tuple)
# range_tuple = tuple(range(1,4))
# print(range_tuple)
# range_tuple = tuple(range(0,6,2))
# print(range_tuple)


# 从列表创建，把列表冻结成元组
# 希望列表不能被修改，我们就将他转换成元组
# list_tuple = tuple([2,3,4])
# print(list_tuple)


#元组的元素访问以及切片
#接收索引以及切片的操作，但是不能修改

# a = (10,2,30,40,50)
#
# print(a[1])
# print(a[1:3])
# print(a[:4])
# print(a[::3])



#常用的操作

#拼接与重复

# a = (1,2)
# b = (3,4)
# c = a + b   #拼接两个元组
# print(c)
#
# d = a *3  #重复了三次
# print(d)
#
#
# #判断
#
# a = (10,20,30)
# print(20 in a )
# print(10 not in a)





# 比较运算,将元素逐个比较
# t1 = (1,2,3)
# t2 = (1,2,4)
# print(t1 < t2)     # 3 < 4



#元素的统计查询

#max，min，sum 元组中所有的元素类型相同并且是可相互比较的（全都是数字）
a = (20,30,10,9,8,8,8)

# print(len(a))   #元素的个数
# print(max(a))   # 最大值
# print(min(a))   #最小值
# print(sum(a))   # 求和

#查找元素第一次出现的下标

# print(a.index(20))
#
# # 统计某个元素出现的次数
#
# print(a.count(8))



#元组的排序
#
# a = (20,10,30,9,8)
# # 返回的是一个列表
# sorted_list = sorted(a)
# print(sorted_list)
# print(type(sorted_list))
#
# sorted_tuple = tuple(sorted(a))
# print(sorted_tuple)


#zip对象与元组
# zip的对象是一次性的迭代器，遍历完就没了，不能重复的使用
# names = ["Alice","Bob","Charlie"]
# age = [25,30,35]
# scores = [90,85,95]
#
# zippped = zip(names,age,scores)
# print(list(zippped))


#什么时候会用到元组
"""
1. 数据是不需要修改的（坐标，IP , ）
2. 作为字典中的键
3. 函数返回多个值
4. 提高程序的安全性（防止意外的修改）

"""